package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func reorderLogFiles(logs []string) []string {
	sort.SliceStable(logs, func(i, j int) bool {
		log1, log2 := logs[i], logs[j]
		split1 := strings.Index(log1, " ")
		split2 := strings.Index(log2, " ")
		_, err1 := strconv.Atoi(string(log1[split1+1]))
		isDig1 := err1 == nil
		_, err2 := strconv.Atoi(string(log2[split2+1]))
		isDig2 := err2 == nil

		//数字日志 应该保留原来的相对顺序。
		if isDig1 && isDig2 {
			return false
		}
		//字母日志 都排在 数字日志 之前
		if isDig1 {
			return false
		}
		if isDig2 {
			return true
		}
		//字母日志 在内容不同时，忽略标识符后，按内容字母顺序排序；
		cmp := strings.Compare(log1[split1+1:], log2[split2+1:])
		if cmp != 0 {
			return cmp < 0
		}
		//字母日志 在内容相同时，按标识符排序
		return log1[:split1] < log2[:split2]
	})
	return logs
}

func main() {
	logs := []string{"dig1 8 1 5 1", "let1 art can", "dig2 3 6", "let2 own kit dig", "let3 art zero"}
	files := reorderLogFiles(logs)
	fmt.Println(len(files))
	fmt.Println(files)
}
